'''
解题思路

这道题采用的是最简单的动态规划与贪心思路。

在这道题目中求解的是最少次数的问题，相信通过前两题，你对贪心+动态规划的组会有了一定的认识：
即通过贪心来约束，当前位置信息仅和当前位置之前的值相关。

在这道题目中，如果我们正向索引，那么很难得到当前点与前几项是相关的，
但如果我们将索引反过来，那么就可以做到了。这里难度值1分

反向后，一切都简单了，即当前点的步数与它前N项有关。即前N项最小值+1。

需要注意，可能会出现0步的现象，为了min函数可以正常调用，我们加入了len(nums), len(nums)来解决。

'''
class Solution:
    def jump(self, nums: List[int]) -> int:
        times = [len(nums) for _ in nums]
        times[len(nums)-1] = 0
        for i in reversed(range(0, len(nums)-1)):
            times[i] = min(len(nums), len(nums), *times[i+1:min(nums[i] + i + 1, len(nums))]) + 1
        return times[0]